package com.hulk.other.Thread;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Semaphore;

/**
 * 多线程访问测试
 * @author CUIJIAJUN
 * @date	2016-5-11
 */
public class ConcurrentTest {
	//并发数
	private static int thread_num = 100;
	//客户端数
	private static int client_num = 200;
	private static Map keywordMap = new HashMap();
//	static {
//		try {
//			InputStreamReader isr = new InputStreamReader(new FileInputStream(
//					new File("clicks.txt")), "GBK");
//			BufferedReader buffer = new BufferedReader(isr);
//			String line = "";
//			while ((line = buffer.readLine()) != null) {
//				keywordMap.put(line.substring(0, line.lastIndexOf(":")), "");
//			}
//		} catch (Exception e) {
//			e.printStackTrace();
//		}
//	}

	public static void main(String[] args) {
//		int size = keywordMap.size();
		// TODO Auto-generated method stub
		ExecutorService exec = Executors.newCachedThreadPool();
		// 50个线程可以同时访问
		final Semaphore semp = new Semaphore(thread_num);
		// 模拟2000个客户端访问
		for (int index = 0; index < client_num; index++) {
			final int NO = index;
			Runnable run = new Runnable() {
				public void run() {
					try {
						// 获取许可
						semp.acquire();
						System.out.println("创建Thread:" + NO);
						String host = "http://192.168.1.23:8081/invite/touchGold?";
						String para = "userId=146966974683864370&activityId=75&source=1";
						System.out.println(host + para);
						URL url = new URL(host);// 此处填写供测试的url
						HttpURLConnection connection = (HttpURLConnection) url.openConnection();
						// connection.setRequestMethod("POST");
						// connection.setRequestProperty("Proxy-Connection",
						// "Keep-Alive");
						connection.setDoOutput(true);
						connection.setDoInput(true);
						PrintWriter out = new PrintWriter(connection
								.getOutputStream());
						out.print(para);
						out.flush();
						out.close();
						BufferedReader in = new BufferedReader(
								new InputStreamReader(connection
										.getInputStream()));
						String line = "";
						String result = "";
						while ((line = in.readLine()) != null) {
							result += line;
						}
						// System.out.println(result);
						// Thread.sleep((long) (Math.random()) * 1000);
						// 释放
						System.out.println("第：" + NO + " 个释放...........");
						semp.release();
					} catch (Exception e) {
						e.printStackTrace();
						System.out.println("最多链接NO="+NO);
					}
				}
			};
			exec.execute(run);
		}
		// 退出线程池
		exec.shutdown();
	}

	private static String getRandomSearchKey(final int no) {
		String ret = "";
		int size = keywordMap.size();
		// int wanna = (int) (Math.random()) * (size - 1); 
		ret = (keywordMap.entrySet().toArray())[no].toString();
		ret = ret.substring(0, ret.lastIndexOf("="));
		System.out.println("\t" + ret);
		return ret;
	}
}